package com.ruoyi.activiti;/*
需求：
1.从Activiti的act_ge_bytearray表中读取两个资源文件
2.将资源文件保存到本地路径中
技术方案：
        1.使用activiti的api来实现
        2.用JDBC对blob clob类型数据的读取
        3.IO流的转换 commons-io.jar
 */

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.apache.commons.io.IOUtils;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;


public class QueryBpmnFile {
    public static void main(String[] args) throws IOException {
        //1.获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.创建repositoryService对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3.获取ProcessDefinitionQuery对象
        ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
        //4.设置条件，并且查询出当前的所有流程的定义,查询条件：流程定义的key=holiday 设置排序方式

        ProcessDefinition holiday = //holiday yanru这里故意加了deploymentid 12501，不然有多个id
                processDefinitionQuery.processDefinitionKey("myProcess_1").deploymentId("12501").singleResult();//.singleResult();
        //5.查询流程定义信息，得到部署ID
        String deploymentId = holiday.getDeploymentId();
        //6.通过repositoryService的方法，实现读取文件信息以及BPMN文件信息（输入流）
        //第一个参数时部署ID，第二个名字叫资源名称
        InputStream pngIS = repositoryService.getResourceAsStream(deploymentId, holiday.getDiagramResourceName());//png文件
        InputStream bpmnIS = repositoryService.getResourceAsStream(deploymentId, holiday.getResourceName());//BPMN文件
        //7.构建输出流
        System.out.println(holiday.getDiagramResourceName());
        FileOutputStream pngOS = new FileOutputStream("D:\\"+holiday.getDiagramResourceName().split("/")[1]);
        FileOutputStream bpmnOS = new FileOutputStream("D:\\"+holiday.getResourceName().split("/")[1]);
        //8.输入流输出流的转换
        IOUtils.copy(pngIS,pngOS);
        IOUtils.copy(bpmnIS,bpmnOS);
        //9.流的关闭
        pngOS.close();
        pngIS.close();
        bpmnOS.close();
        bpmnIS.close();
    }
}
